package Modele;

import java.util.ArrayList;

import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;

import Modele.Billet.BilletListener;

public class Panier extends Model implements HttpSessionBindingListener
{
	private ArrayList<Billet> billets = new ArrayList<Billet>();
	
	public void ajouterbillet(Billet billet)
	{
		this.billets.add(billet);
		
		billet.addListener(new BilletListener() 
		{
			
			@Override
			public void reservationLiberee(Billet b) 
			{
				billets.remove(b);			
			}
			
			@Override
			public void reservationEffectuee(Billet b) {}
			
			@Override
			public void achatEffectue(Billet b) {}
		});
	}	
	
	public void retirerBillet ( Billet b )
	{
		b.liberer ( );
	}
	
	public int getNbBillets ( )
	{
		return billets.size();
	}
	
	@SuppressWarnings("unchecked")
	public ArrayList<Billet> getBillets ( )
	{
		// Pour forcer la vérification d'expiration du billet
		// La liste est clonée pour empecher que l'itérateur plante quand
		// un billet est enlevé par le listener.
		
		for ( Billet b : (ArrayList<Billet>)billets.clone() )
			b.getStatus();	
		
		return (ArrayList<Billet>)billets.clone ( );
	}

	// Appelé lors de la suppression de la session
	@SuppressWarnings("unchecked")
	@Override
	public void valueUnbound(HttpSessionBindingEvent arg0) 
	{
		for ( Billet b : (ArrayList<Billet>)billets.clone() )
			retirerBillet ( b );	
	}

	@Override
	public void valueBound(HttpSessionBindingEvent arg0) 
	{
	}
}
